﻿//BaseStorageEntityList.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Algo.Storages
{
	using Ecng.Data;
	using Ecng.Serialization;

	using StockSharp.BusinessEntities;

	/// <summary>
	/// Базовый класс для представления в виде списка торговых объектов, хранящихся в базе данных.
	/// </summary>
	/// <typeparam name="T">Тип торгового объекта (например, <see cref="Security"/> или <see cref="MyTrade"/>).</typeparam>
	public abstract class BaseStorageEntityList<T> : HierarchicalPageLoadList<T>, IStorageEntityList<T>
		where T : class
	{
		/// <summary>
		/// Инициализировать <see cref="BaseStorageEntityList{T}"/>.
		/// </summary>
		/// <param name="storage">Специальный интерфейс для прямого доступа к хранилищу.</param>
		protected BaseStorageEntityList(IStorage storage)
			: base(storage)
		{
		}

		/// <summary>
		/// Сохранить торговый объект.
		/// </summary>
		/// <param name="entity">Торговый объект.</param>
		public virtual void Save(T entity)
		{
			var id = Schema.Identity.Accessor.GetValue(entity);

			if (ReadById(id) == null)
				Add(entity);
			else
				Update(entity);
		}
	}
}